﻿/**
* @file port.h
* @brief this is a brief description
* @details this is the detail description.
* @author fulong 
* @data 2014/10/23
* @version 1.0
* @par Copyright (c):
* @par First build
*     version: fulong 
*     data: 2014/10/23
*/
#ifndef __PORT_H__
#define __PORT_H__
#include "../../../../hal_include/hal_types.h"

//about i2c
/*!< set waht the sda of i2c port is */
#define I2C_SDA_PORT(portdata)  GPIO_WriteBit(GPIOB,GPIO_Pin_7,(portdata))
#define READ_I2C_SDA_PORT()  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)
#define i2c_sda_output() set_output(PORTB,GPIO_Mode_Out_PP, 7)
#define i2c_sda_input() set_input(PORTB,GPIO_Mode_IN_FLOATING,7)
/*!< set waht the scl of i2c port is */
#define I2C_SCL_PORT(portdata) GPIO_WriteBit(GPIOB,GPIO_Pin_6,(portdata))
#define i2c_sck_output() set_output(PORTB,GPIO_Mode_Out_PP, 6)

//about running led
#define RUN_LED_ON() GPIO_ResetBits(GPIOB,GPIO_Pin_0);
#define RUN_LED_OFF() GPIO_SetBits(GPIOB,GPIO_Pin_0);
#define RUN_LED_CTRL() set_output(PORTB,GPIO_Mode_Out_PP, 0);

//about keyboard

#define KEYBOARD_ROW 1
#define KEYBOARD_LINE 3
#define set_keycol1_port_input()      set_input(PORTC,GPIO_Mode_IN_FLOATING,12)
#define set_keycol2_port_input()      set_input(PORTC,GPIO_Mode_IN_FLOATING,11)
#define set_keycol3_port_input()      set_input(PORTC,GPIO_Mode_IN_FLOATING,10)
#define keycol1_in GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)
#define keycol2_in GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)
#define keycol3_in GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)

//about input

#define set_in0_input() set_input(PORTA,GPIO_Mode_IN_FLOATING,6)
#define set_in1_input() set_input(PORTA,GPIO_Mode_IN_FLOATING,1)
#define set_in2_input() set_input(PORTA,GPIO_Mode_IN_FLOATING,0)
#define set_in3_input() set_input(PORTC,GPIO_Mode_IN_FLOATING,13)
#define set_in4_input() set_input(PORTB,GPIO_Mode_IN_FLOATING,9)

#define IN0_PIN GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)
#define IN1_PIN GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)
#define IN2_PIN GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define IN3_PIN GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)
#define IN4_PIN GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)
//about output
#define OUTPUT_CTRL_ON() GPIO_SetBits(GPIOB,GPIO_Pin_4)
#define set_output_led_ctrl_output() set_output(PORTB,GPIO_Mode_Out_PP,4)

/*!< test output port*/
//#define OUTPUT_TEST

#define OUT0(odata) GPIO_WriteBit(GPIOB,GPIO_Pin_5,(odata))
#define OUT1(odata) GPIO_WriteBit(GPIOB,GPIO_Pin_8,(odata))

#define set_out0_output()  set_output(PORTB,GPIO_Mode_Out_PP,5)
#define set_out1_output()  set_output(PORTB,GPIO_Mode_Out_PP,8)

//about display

#ifdef __SIMPLE_DISPLAY__
    #define LED_B1(value)			GPIO_WriteBit(GPIOB,GPIO_Pin_11,(value))
    #define set_led_seg1_output() set_output(PORTB,GPIO_Mode_Out_PP,11);
    #define LED_B2(value)			GPIO_WriteBit(GPIOB,GPIO_Pin_10,(value))
    #define set_led_seg2_output() set_output(PORTB,GPIO_Mode_Out_PP,10);
    #define LED_B3(value)			GPIO_WriteBit(GPIOB,GPIO_Pin_1,(value))
    #define set_led_seg3_output() set_output(PORTB,GPIO_Mode_Out_PP,1);

    #define	LEDDATAPORT(portdata)	GPIO_Write(GPIOC,GPIO_ReadOutputData(GPIOC) & 0xFF00 | (uint8)portdata)
    #define set_led_data_port_output() { \
    set_output(PORTC,GPIO_Mode_Out_PP,0);\
    set_output(PORTC,GPIO_Mode_Out_PP,1);\
    set_output(PORTC,GPIO_Mode_Out_PP,2);\
    set_output(PORTC,GPIO_Mode_Out_PP,3);\
    set_output(PORTC,GPIO_Mode_Out_PP,4);\
    set_output(PORTC,GPIO_Mode_Out_PP,5);\
    set_output(PORTC,GPIO_Mode_Out_PP,6);\
    set_output(PORTC,GPIO_Mode_Out_PP,7);\
}
    #define LED1_B1(value)			GPIO_WriteBit(GPIOC,GPIO_Pin_9,(value))
    #define set_led_seg1_output1() set_output(PORTC,GPIO_Mode_Out_PP,9);
    #define LED1_B2(value)			GPIO_WriteBit(GPIOC,GPIO_Pin_8,(value))
    #define set_led_seg2_output1() set_output(PORTC,GPIO_Mode_Out_PP,8);
    #define LED1_B3(value)			GPIO_WriteBit(GPIOB,GPIO_Pin_15,(value))
    #define set_led_seg3_output1() set_output(PORTB,GPIO_Mode_Out_PP,15);

    #define	LEDDATAPORT1(portdata)	GPIO_Write(GPIOA,GPIO_ReadOutputData(GPIOA) & 0x00FF | ((uint16)portdata<<8))
    #define set_led_data_port_output1() { \
    set_output(PORTA,GPIO_Mode_Out_PP,8);\
    set_output(PORTA,GPIO_Mode_Out_PP,9);\
    set_output(PORTA,GPIO_Mode_Out_PP,10);\
    set_output(PORTA,GPIO_Mode_Out_PP,11);\
    set_output(PORTA,GPIO_Mode_Out_PP,12);\
    set_output(PORTA,GPIO_Mode_Out_PP,13);\
    set_output(PORTA,GPIO_Mode_Out_PP,14);\
    set_output(PORTA,GPIO_Mode_Out_PP,15);\
}
#endif
//MAX6675 port

#define SET_CS_OUTPUT() set_output(PORTB,GPIO_Mode_Out_PP,12)
#define max6675_cs_on()	 GPIO_SetBits(GPIOB,GPIO_Pin_12);
#define max6675_cs_off()  GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define SET_CLK_OUTPUT() set_output(PORTB,GPIO_Mode_Out_PP,13)
#define max6675_clk_on() GPIO_SetBits(GPIOB,GPIO_Pin_13);
#define max6675_clk_off() GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define SET_SO_INPUT() set_input(PORTB,GPIO_Mode_IN_FLOATING,14)
#define get_so_data() GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)

//LM35DZ

#define SET_LM35DZ_INPUT() set_input(PORTA,GPIO_Mode_AIN,7);

#endif /* __PORT_H__ */


